#include <stdlib.h>
#include<string.h>
#include <unistd.h>
#include "msgq.h"
#include "states.h"
#include "tools.h"

void sub_menu();

Ctos ctos;
Stoc stoc;

void open_acc(void)
{
	ctos.type = TYPE_OPEN;
	
	pf("请输入姓名：");
	get_str(ctos.acc.name,20);
	pf("请输入身份证号:");
	get_str(ctos.acc.card,19);
	pf("请设置您的密码:");
	sf("%d",&ctos.acc.pass);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
}

void login(void)
{
	ctos.type = TYPE_LOGIN;
	printf("请输入账号：");
	scanf("%u",&ctos.acc.id);
	printf("请输入密码：");
	scanf("%d",&ctos.acc.pass);
    ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
	if(0==strcmp(stoc.str,"登陆成功"))		
	{		
		sub_menu();
	}
	else
		return;
}

void destory(void)
{
	ctos.type = TYPE_DESTORY;

	pf("请输入账号：");
	sf("%u",&ctos.acc.id);
	pf("请输入密码：");
	sf("%d",&ctos.acc.pass);
    ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
}

void unlock(void)
{
	ctos.type = TYPE_UNLOCK;

	pf("请输入账号：");
	sf("%u",&ctos.acc.id);
	pf("请输入身份证号码：");
	sf("%s",ctos.acc.card);
    ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
}

void save(void)
{
	ctos.type = TYPE_SAVE;
	
	pf("请输入存款金额：");
	sf("%f",&ctos.acc.money);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
}

void take(void)
{
	ctos.type = TYPE_TAKE;
	
	pf("请输入取款金额：");
	sf("%f",&ctos.acc.money);
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
}

void transf(void)
{
	ctos.type = TYPE_TRANSF;
	
	pf("请输入转账金额：");
	sf("%f",&ctos.acc.money);
	pf("请输入转账账号：");
	sf("%u",&ctos.acc.id_to);	
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
}

void query(void)
{
	ctos.type = TYPE_QUERY;
	ctos_send(&ctos);
	stoc_recv(&stoc,ctos.pid);
	pf("server:%s\n",stoc.str);
}

void main_menu()
{
	for(;;)
	{
		system("clear");
		pf("-----------ATM-----------\n");
		pf("----1、开户----2、登录----\n");
		pf("----3、销户----4、解锁----\n");
		pf("----5、退出----\n");
		switch(get_cmd('1','5'))
		{
			case '1': open_acc();any_key();break;
			case '2': login();any_key(); break;
			case '3': destory();any_key(); break;
			case '4': unlock(); any_key();break;
			case '5': return;
		}
	}
}

void sub_menu()
{
	for(;;)
	{
		system("clear");
		pf("------ATM------\n");
		pf("----1、存款----\n----2、取款----\n");
		pf("----3、转账----\n----4、查余----\n----5、返回----\n\n");
		switch(get_cmd('1','5'))
		{
			case '1': save();any_key(); break;
			case '2': take(); any_key();break;
			case '3': transf();any_key(); break;
			case '4': query();any_key();break;
			case '5': return;
		}
	}
}

int main()
{
	ctos.pid = getpid();
	// 初始化消息队列
	init_msgq();
	// 进入主菜单
	main_menu();
}
